﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MySql.Data;
using MySql.Data.MySqlClient;
using System.Data;
using System.Data.Odbc;
using log4net;
using log4net.Config;
using System.Windows.Forms;

namespace LectorHuellaC
{
    class ConectaBD
    {
        public MySqlConnection Conexion;
        public OdbcConnection ConexionODBC;
        log4net.ILog logger;
        public string conexioStatus;
        public ConectaBD()
        {
            log4net.Config.XmlConfigurator.Configure();
            logger = log4net.LogManager.GetLogger(typeof(Program));
        }

        private bool ConectaODBC()
        {
            //Configurar Log, de acuerdo a la archivo app.config
            
            string Driver = "MySQL ODBC 5.1 Driver";
            //string ConectionStringODBC = "Driver={" + Driver + "};Port=3306;Server=soltecconsultores.com.mx;Database=soltec_centralfra;Uid=soltec_centsis;Pwd=b1s=37a#k#z);Option=1";
            string ConectionStringODBC = "Driver={" + Driver + "};Port=3306;Server=localhost;Database=soltec_centralfra;Uid=root;Pwd=root;Option=1";

            ConexionODBC = new OdbcConnection(ConectionStringODBC);

            if (ConexionODBC.State == ConnectionState.Open)
            {
                conexioStatus = "Conexion online soltecconsultores";
                return true;
            }
            else
            {
                try
                {

                    ConexionODBC.Open();
                    conexioStatus = "Conexion online soltecconsultores";
                    return true;
                }
                catch (Exception ex)
                {
                    //MessageBox.Show("Se ha producido un error en la conexion", "Validacion", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    logger.Error("error"+ex);
                    conexionLocal();
                    return conexionLocal();
                }
            }
        }


        private bool Conecta()
        {
            // Para conectarse con las librerias de MySQL.Data
            //string path = "DataBase=prueba;DataSource=localhost;Port=3306; user=root; password=";
            string path = "DataBase=soltec_centralfra;DataSource=localhost;Port=3306; user=root; password=root";
            Conexion = new MySqlConnection(path);

            if (Conexion.State == ConnectionState.Open)
            {
                return true;
            }
            else
            {
                try
                {
                    //Conexion.Open();
                    return true;
                }
                catch (Exception ex)
                {
                    logger.Error("error" + ex);
                    return false;
                }
            }
        }

        public bool InsertUpdate(string Instruccion)
        {
            //if (Conecta() == true)
            if (ConectaODBC() == true)
            {
                try
                {
                    ///MySqlCommand cmd = new MySqlCommand(Instruccion, Conexion); // Por MySQL
                    OdbcCommand cmd = new OdbcCommand(Instruccion, ConexionODBC); // Por ODBC
                    cmd.ExecuteNonQuery();
                    return true;
                }
                catch (Exception ex)
                {
                    logger.Error("error" + ex);  
                    return false;
                }                
            }
            else
            { return false; }
        }

        
        public DataSet Consulta(string Consulta)
        {
            ///if (Conecta() == true)
            if (ConectaODBC() == true)
            {
                try
                {
                    //MySqlDataAdapter da = new MySqlDataAdapter(Consulta, Conexion); // MySQL
                    OdbcDataAdapter da = new OdbcDataAdapter(Consulta, ConexionODBC); // ODBC
                    DataSet ds = new DataSet();
                    da.Fill(ds, "Resultado");
                    return ds;
                }
                catch (Exception ex)
                {
                    logger.Error("Error" + ex);
                    DataSet ds = new DataSet();
                    //ds.DataSetName = "Resultado"; 
                    //DataTable dt = ds.Tables.Add("Error");
                    //dt.Columns.Add(new DataColumn("MensajeError", typeof(string)));                
                    //dt.Rows.Add("Error al obtener el dataset de la consulta");
                    return ds;
                }
            }
            else
            {
                    DataSet ds = new DataSet();
                    //DataTable dt = ds.Tables.Add("Error");
                    //dt.Columns.Add(new DataColumn("MensajeError", typeof(string)));                
                    //dt.Rows.Add("Conexion a BD Error ");
                    return ds;                
            }
        }

        public bool conexionLocal(){
            string Driver = "MySQL ODBC 5.1 Driver";
            string ConectionStringODBCLocal = "Driver={" + Driver + "};Port=3306;Server=localhost;Database=soltec_centralfra;Uid=root;Pwd=root;Option=1";
            //string ConectionStringODBCLocal = "oot;Pwd=root;Option=1";
            ConexionODBC = new OdbcConnection(ConectionStringODBCLocal);
            try
            {
                if (ConexionODBC.State == ConnectionState.Open)
                {
                    conexioStatus = "Conexion local a soltecconsultores";
                    return true;
                }
                else
                {
                    conexioStatus = "Conexion local a soltecconsultores";
                    ConexionODBC.Open();
                    return true;
                }
            }catch(Exception ex){
                conexioStatus = "Sin conexion a ningun servidor";
                logger.Error("Error",ex);
                return false;
            }
          }

        #region "Clase Empleados que contiene 2 atributos id y nombre"
        public class clsEmpleados
        {
            String clsNombreEmpleado;
            String clsIdEmpleado;

            public clsEmpleados(String NombreEmpleado,
                                      String IdEmpleado)
            {
                this.clsNombreEmpleado = NombreEmpleado;
                this.clsIdEmpleado = IdEmpleado;
            }

            public string NombreEmpleado
            {
                get { return this.clsNombreEmpleado; }
            }

            public string IdEmpleado
            {
                get { return this.clsIdEmpleado; }
            }
        }
        #endregion

        #region "Clase Empresas que contiene 2 atributos IdEmpresa y Nombre"
        public class clsEmpresas
        {
            String clsEmpresa;
            String clsIdEmpresa;

            public clsEmpresas(String Empresa,
                                      String IdEmpresa)
            {
                this.clsEmpresa = Empresa;
                this.clsIdEmpresa = IdEmpresa;
            }

            public string Empresa
            {
                get { return this.clsEmpresa; }
            }

            public string Id_Empresa
            {
                get { return this.clsIdEmpresa; }
            }
        }
        #endregion

        #region "Clase Sucursales que contiene 2 atributos IdSucursal y NombreSucursal"
        public class clsSucursales
        {
            String clsNombreSucursal;
            String clsIdSucursal;

            public clsSucursales(String NombreSucursal,
                                      String IdSucursal)
            {
                this.clsNombreSucursal = NombreSucursal;
                this.clsIdSucursal = IdSucursal;
            }

            public string sc_nombre
            {
                get { return this.clsNombreSucursal; }
            }

            public string Id_Sucursal
            {
                get { return this.clsIdSucursal; }
            }
        }
        #endregion


   }
}

